/**
  ******************************************************************************
  * @file    SD93F115B_iwdg.c
  * @author   TEST TEAM 												    	
  * @version  v0															    	
  * @date     Septemper 2022												    	
  * @brief
  *
  * Copyright (C) 2022  Hangzhou SDIC Microelectronics Co., Ltd
**********************************************************************************/

/* Includes */
    
 #include "SD93F115B_iwdg.h"
 #include "SD93F115B_rcc.h"

/*------------------------------------------------------------
 * 函数功能：初始化独立看门狗
 * 入口参数：IWDG_Prescaler,IWDG_Reload
 * 			 IWDG_Prescaler: IWDG_Prescaler_2,IWDG_Prescaler_4,IWDG_Prescaler_8,IWDG_Prescaler_16,IWDG_Prescaler_32\
 *           IWDG_Prescaler_64,IWDG_Prescaler_128,IWDG_Prescaler_256
 *           IWDG_Reload: IWDG_Reload_256,IWDG_Reload_6656,IWDG_Reload_23040,IWDG_Reload_29696,IWDG_Reload_36096,IWDG_Reload_65536
 * 出口参数：None
 * 返回值  ：None
 * 编写日期：
 * 作者    ：
 *------------------------------------------------------------*/
void IWDG_Init(uint16_t IWDG_Prescaler,uint16_t IWDG_Reload)
{
	IWDG_SetPrescaler(IWDG_Prescaler);
    IWDG_SetReload(IWDG_Reload); 
	
}
/*-----------------------------------------------
 * 函数功能：设置独立看门狗预分频器
 * 入口参数：IWDG_Prescaler: IWDG_Prescaler_2,IWDG_Prescaler_4,IWDG_Prescaler_8,IWDG_Prescaler_16,IWDG_Prescaler_32\
 *           IWDG_Prescaler_64,IWDG_Prescaler_128,IWDG_Prescaler_256
 * 出口参数：None
 * 返回值  ：None
 * 编写日期：
 * 作者    ：
 *-----------------------------------------------*/
void IWDG_SetPrescaler(uint16_t IWDG_Prescaler)      
{
	/* Check the parameters */
	assert_param(IS_IWDG_Prescaler(IWDG_Prescaler));
	uint16_t tmpreg=0;
	tmpreg=IWDG->CR & 0x801F;
	tmpreg|= IWDG_Prescaler; 
	IWDG->CR=tmpreg;
}

/*--------------------------------------------
 * 函数功能：设置独立看门狗重载值
 * 入口参数：IWDG_Reload: IWDG_Reload_256,IWDG_Reload_6656,IWDG_Reload_23040,IWDG_Reload_29696,IWDG_Reload_36096,IWDG_Reload_65536
 * 出口参数：None
 * 返回值  ：None
 * 编写日期：
 * 作者    ：
 *-------------------------------------------*/
void IWDG_SetReload(uint16_t IWDG_Reload)
{
	/* Check the parameters */
	assert_param(IS_IWDG_Reload(IWDG_Reload));
	
	uint16_t tmpreg=0;
	tmpreg=IWDG->CR & 0x80E3;
	tmpreg|= IWDG_Reload; 	
	IWDG->CR =tmpreg;
	
}

/*-------------------------------------------
 * 函数功能：读取看门狗中配置信息
 * 入口参数：None
 * 出口参数：None
 * 返回值  ：
 * 编写日期：
 * 作者    ：
 *-------------------------------------------*/
FlagStatus IWDG_GetIWDTconfig(void)
{
	FlagStatus bitstatus = RESET;
	
	if((IWDG->CR & IWDG_CR_WDT_CFG) ==RESET)
	{		
		bitstatus=RESET;		
	}		
	else 
	{
		bitstatus=SET;		
	}
	return bitstatus;		
}

/*-------------------------------------------------
 * 函数功能：使能独立看门狗
 * 入口参数：IWDG_Mode: IWDG_Mode_NoWorking,IWDG_Mode_WAIT,IWDG_Mode_Normal,IWDG_Mode_NormalWait
 * 出口参数：None
 * 返回值  ：None
 * 编写日期：
 * 作者    ：
 *-------------------------------------------------*/
void IWDG_Cmd(IWDGMode_TypeDef IWDG_Mode)
{
	/* Check the parameters */
	assert_param(IS_IWDG_Mode(IWDG_Mode));
	
	uint16_t tmpreg=0;
	tmpreg=IWDG->CR & 0x80FC;
	tmpreg|= ((uint16_t)IWDG_Mode); 	
	IWDG->CR =tmpreg;
}

/*-----------------------------------
 * 函数功能：喂狗
 * 入口参数：None
 * 出口参数：None
 * 返回值  ：None
 * 编写日期：
 * 作者    ：
 *----------------------------------*/
void IWDG_ReloadCounter(void) 
{
	IWDG->SETKEY = IWDG_ReloadKey;
}

/*-----------------------------------------
 * 函数功能：使能独立看门狗中断
 * 入口参数：ENABLE或DISABLE
 * 出口参数：None
 * 返回值  ：None
 * 编写日期：
 * 作者    ：
 *-----------------------------------------*/
void IWDG_ITCmd(FunctionalState NewState)
{
	/* Check the parameters */	 
	assert_param(IS_FUNCTIONAL_STATE(NewState));	
	if (NewState == ENABLE)
	{	
		IWDG->CR|=IWDG_CR_WDTIE;							
	} 
	else 
	{
		IWDG->CR &=~IWDG_CR_WDTIE;		
	}		
}

/*-------------------------------------------
 * 函数功能：读取看门狗中断标志位
 * 入口参数：None
 * 出口参数：None
 * 返回值  ：
 * 编写日期：
 * 作者    ：
 *-------------------------------------------*/
ITStatus IWDG_GetITStatus(void)
{
	FlagStatus bitstatus = RESET;
	
	if((IWDG->SR & IWDG_SR_WDTIF) ==RESET)
	{		
		bitstatus=RESET;		
	}		
	else 
	{
		bitstatus=SET;		
	}
	return bitstatus;		
}

/*--------------------------------
 * 函数功能：清看门狗中断标志位
 * 入口参数：None
 * 出口参数：None
 * 返回值  ：None
 * 编写日期：
 * 作者    ：
 *--------------------------------*/
void IWDG_ClearITStatus(void)
{	
	IWDG->SR|= IWDG_SR_WDTIF;		
}

/****************************END OF FILE****************************/


